﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using sipfe.service.menu;
using sipfe.Controllers.Base;
using sipfe.model.dataAccess;
using sipfe.util;
using sipfe.service.bandeja;
using sipfe.service.helper;
using System.IO;
using sipfe.Areas.File.Controllers;
using sipfe.model.vo;


namespace sipfe.Areas.Bandeja.Controllers
{
    public class BandejaController : BaseSipfeController
    {
        public ActionResult bandejaCab()
        {
            var menu_items = System.Web.HttpContext.Current.Session["MENU_ITEMS"];
            string vista = "bandejaCab";
            string perfilUsuario = Session[Constante.N_IDE_PERFIL].ToString(); 
            if (menu_items == null)
            {
                FormaMenuService menu = new FormaMenuService();
                menu_items = new HtmlString(string.Format("<script>{0}</script>", menu.getMenuByPerfil(perfilUsuario)));
                System.Web.HttpContext.Current.Session["MENU_ITEMS"] = menu_items;
            }
            ViewBag.optionBandejaUsuario = formaSelectBandejaUser(Session[Constante.N_IDE_USUARIO].ToString(), Session[Constante.N_IDE_DEPENDENCIA].ToString());
            @ViewBag.rpta = "0";
            ViewBag.ClaseTramite = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_CLASE_TRAMITE);
            if (Constante.PERFIL_USUARIO.INVITADO_WEB.Equals(perfilUsuario)) vista = "bandejaInvCab";
            return View(vista);
        }

        public HtmlString setCambioBandeja(string nuevaBandeja, string bandeja)
        {
            var resultado = "{\"nuevaBandeja\":\"" + nuevaBandeja + "\",\"bandeja\":\"" + bandeja + "\"}";
            Session[Constante.N_IDE_DEPENDENCIA]    = Int32.Parse(nuevaBandeja);
            Session[Constante.V_DEPENDENCIA]        = bandeja;
            return new HtmlString(resultado);
        }

        public ViewResult filtraPorFecha(string dFecInicio, string dFecFin, string tipoBandeja)
        {
            string nIdeDepUser      =   Session[Constante.N_IDE_DEPENDENCIA].ToString();
            string perfilUsuario    =   Session[Constante.N_IDE_PERFIL].ToString();
            string idUsuario        =   Session[Constante.N_IDE_USUARIO].ToString();
            string vista            =   "bandejaDet";
            ViewBag.nIdeTipoBandeja = tipoBandeja;
            if (Constante.PERFIL_USUARIO.INVITADO_WEB.Equals(perfilUsuario)) vista = "bandejaInvDet";

            BandejaService bandejaService = new BandejaService();
            IList<dynamic> lista = bandejaService.filtraPorFechaService(dFecInicio, dFecFin, tipoBandeja, nIdeDepUser, perfilUsuario, idUsuario);
            int cant = lista.Count();

            if (cant > 0)
             {
                 return View(vista, lista);
             }
             else
             {
                 return View("general/SinRegistros");
             }
        }

        public ViewResult buscarPorNIT(string nIdeDepSolicitud, string nIdeClaseSolicitud, string nAnnSolicitud, string nNumCorre, string tipoBandeja)
        {
            string nIdeDepUser = Session[Constante.N_IDE_DEPENDENCIA].ToString();
            BandejaService bandejaService = new BandejaService();
            IList<dynamic> lista = bandejaService.buscarPorNITService(nIdeDepSolicitud, nIdeClaseSolicitud, nAnnSolicitud, nNumCorre, nIdeDepUser, tipoBandeja);
            int cant = lista.Count();

            if (cant > 0)
             {
                 return View("bandejaDet",lista);
             }
             else
             {
                 return View("general/SinRegistros");
             }
        }

        public HtmlString marcarRecepFisicaAhora(decimal nIdeSol, decimal nSeqPaso, decimal nSeqactor)
        {
            BandejaService bandejaService = new BandejaService();
            string idUsuario = Session[Constante.N_IDE_USUARIO].ToString();
            DateTime hoy = UtilitariosUtil.FechaHoyHHMMSS();
            int rpta = bandejaService.marcarRecepFisicaAhoraService(nIdeSol, nSeqPaso, nSeqactor, idUsuario);
            return new HtmlString((rpta == 1) ? hoy.ToString("dd/MM/yyyy HH:mm") : "");
        }
        public ViewResult recepcionFisicaLote()
        {
            return View();
        }

        public HtmlString recepcionFisicaLoteFin(string cadena, string dfecRecepFis, string hora, string minuto)
        {
            BandejaService bandejaService = new BandejaService();
            string idUsuario = Session[Constante.N_IDE_USUARIO].ToString();
            DateTime hoy = UtilitariosUtil.FechaHoyHHMMSS();
            int rpta = bandejaService.recepcionFisicaLoteFinService(cadena, dfecRecepFis, hora, minuto, idUsuario);           
            return new HtmlString("1");
        }

        public ViewResult buscarEnMiBandeja()
        {
            return View();
        }

        public ViewResult tabDerivarTramite(string nIdeSol, string nSeqPaso, string nSeqActor, string solicitud, string fechaLectura, 
                                            string clase, string nIdeTipoBandeja)
        {
            string vista = "tabDerivarTramite";
            if (nIdeTipoBandeja.Equals("3"))
            {
                vista = "tabBandejaSalida";
            }




            string perfilUsuario = Session[Constante.N_IDE_PERFIL].ToString();
            if (Constante.PERFIL_USUARIO.INVITADO_WEB.Equals(perfilUsuario)) vista = "tabDerivarTramiteInv";
            
            ViewBag.nIdeSol         =   nIdeSol;
            ViewBag.nSeqPaso        =   nSeqPaso;
            ViewBag.nSeqActor       =   nSeqActor;
            ViewBag.solicitud       =   solicitud;
            ViewBag.fechaLectura    = fechaLectura;
            ViewBag.clase = clase;
            return View(vista);
        }

        public ViewResult derivarTramiteBandeja(string nIdeSol, string nSeqPaso, string nSeqActor, string solicitud, string fechaLectura)
        {
            ViewBag.Para = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PARA);
            ViewBag.Prioridad = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PRIORIDAD);
            ViewBag.DocAcompa = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_DOC_ACOMPA);
            ViewBag.nIdeSol = nIdeSol;
            ViewBag.nSeqPaso = nSeqPaso;
            ViewBag.nSeqActor = nSeqActor;
            ViewBag.solicitud = solicitud;

            if (  fechaLectura ==null )
            {
                BandejaService bandejaService = new BandejaService();
                string idUsuario = Session[Constante.N_IDE_USUARIO].ToString();
                bandejaService.setFechaLecturaService(nIdeSol, nSeqPaso, nSeqActor, idUsuario);
            }
            return View();
        }

        public ViewResult formBitacoraInp(string nIdeSol, string nSeqPaso, string nSeqActor, string solicitud)
        {
            ViewBag.nIdeSol     =   nIdeSol;
            ViewBag.nSeqPaso    =   nSeqPaso;
            ViewBag.nSeqActor   =   nSeqActor;
            ViewBag.solicitud   =   solicitud;
            BandejaService bandejaService = new BandejaService();
            List<SIPDetBitacora> lista = new List<SIPDetBitacora>();
            lista = bandejaService.listaBitacoraService(nIdeSol);
            ViewBag.listaBitacora = lista;
            int count = lista.Count;
            return View();
        }

        public ViewResult UpLoadFileBandejaxxxxx(int nIdeSol, string nSeqPaso, string nSeqActor, string solicitud)
        {
            ViewBag.nIdeSol = nIdeSol;
            ViewBag.nSeqPaso = nSeqPaso;

            BandejaService bandejaService = new BandejaService();
            return View(bandejaService.listaArchivosAdjuntosService(nIdeSol));
        }

        public ViewResult formAsignar(string nIdeSol, string nSeqPaso, string nSeqActor, string solicitud)
        {
            BandejaService bandejaService = new BandejaService();
            string nIdeDepUser      =   Session[Constante.N_IDE_DEPENDENCIA].ToString();
            ViewBag.PersonalArea    =   new SelectList(bandejaService.getListaPersonasPorAreaService(nIdeDepUser), "nIdeItemD", "vDescrItem");
            ViewBag.Para            =   formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PARA);
            ViewBag.Prioridad       =   formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PRIORIDAD);
            ViewBag.DocAcompa       =   formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_DOC_ACOMPA);
            ViewBag.nIdeSol         =   nIdeSol;
            ViewBag.nSeqPaso        =   nSeqPaso;
            ViewBag.nSeqActor       =   nSeqActor;
            ViewBag.solicitud       = solicitud;
            return View();
        }

        public HtmlString validaDestinos(string vDestinos)
        {
            HelperService helperService = new HelperService();
            int rpta = helperService.validaDestinosService(vDestinos);
            var resultado = "{\"rpta\":\"" + rpta + "\"}";
            return new HtmlString(resultado);
        }

        [HttpPost]
        public ActionResult registraDerivacion_old(SIPDetSolicitud sipDetSolicitud)
        {
            if (ModelState.IsValid)
            {
                BandejaService bandejaService = new BandejaService();
                String[] rpta = bandejaService.registraDerivacionService(sipDetSolicitud);
                int n_IdeSol = Int32.Parse(rpta[0]);
                int nextPaso = Int32.Parse(rpta[1]);
                FileUploadController xx = new FileUploadController();



                if (nextPaso > 1)
                {
                    insertaArchivos(n_IdeSol, nextPaso);
                }
                return RedirectToAction("DerivaRpta", new { nIdeSol = 1, rpta = 1 });
            }
            ViewBag.optionBandejaUsuario = formaSelectBandejaUser(Session[Constante.N_IDE_USUARIO].ToString(), Session[Constante.N_IDE_DEPENDENCIA].ToString());
            return View("BandejaCab");
        }



        [HttpPost]
        public ActionResult registraDerivacion(SIPDetSolicitud sipDetSolicitud)
        {
            if (ModelState.IsValid)
            {
                BandejaService bandejaService = new BandejaService();
                HttpFileCollectionBase uploads = Request.Files;
                
                int sizeFile = uploads.Count;
                if (sizeFile >0)
                {
                    FileUploadController fileUploadController = new FileUploadController();
                    SIPDetArchivo sipDetArchivo = new SIPDetArchivo();
                    string idCampoFile  =   "idAdjunto";
                    string v_Comentario =   "";
                    int n_IdeUsuReg = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
                    HttpPostedFileBase file = Request.Files[idCampoFile];
                    sipDetArchivo = fileUploadController.getSIPDetArchivo(file, idCampoFile, Constante.N_TIPO_ADJUNTO_PASO, v_Comentario, n_IdeUsuReg);
                    sipDetSolicitud.SIPDetArchivo.Add(sipDetArchivo);
                }
                String[] rpta = bandejaService.registraDerivacionService(sipDetSolicitud);
                return RedirectToAction("DerivaRpta", new { nIdeSol = 1, rpta = 1 });
            }
            ViewBag.optionBandejaUsuario = formaSelectBandejaUser(Session[Constante.N_IDE_USUARIO].ToString(), Session[Constante.N_IDE_DEPENDENCIA].ToString());
            ViewBag.ClaseTramite = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_CLASE_TRAMITE);
            return View("BandejaCab");
        }


        [HttpPost]
        public ActionResult registraBitacora(SIPDetBitacora sipDetBitacora)
        {
            if (ModelState.IsValid)
            {
                BandejaService bandejaService = new BandejaService();
                HttpFileCollectionBase uploads = Request.Files;

                int sizeFile = uploads.Count;
                if (sizeFile > 0)
                {
                    FileUploadController fileUploadController = new FileUploadController();
                    SIPDetArchivo sipDetArchivo = new SIPDetArchivo();
                    string idCampoFile = "idAdjuntoBita";
                    string v_Comentario     =   "";
                    int n_IdeUsuReg         =   Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
                    HttpPostedFileBase file =   Request.Files[idCampoFile];
                    sipDetArchivo           =   fileUploadController.getSIPDetArchivo(file, idCampoFile, Constante.N_TIPO_ADJUNTO_PASO, v_Comentario, n_IdeUsuReg);
                    sipDetBitacora.SIPDetArchivo.Add(sipDetArchivo);
                }
                String[] rpta = bandejaService.registraBitacoraService(sipDetBitacora);
               
                return RedirectToAction("DerivaRpta", new { nIdeSol = 1, rpta = 1 });
            }
            ViewBag.rpta = "0";
            ViewBag.optionBandejaUsuario = formaSelectBandejaUser(Session[Constante.N_IDE_USUARIO].ToString(), Session[Constante.N_IDE_DEPENDENCIA].ToString());
           
            return View("BandejaCab");
        }

        [HttpPost]
        public ActionResult registraAsignacion(SIPDetSolicitud sipDetSolicitud)
        {
            if (ModelState.IsValid)
            {
                BandejaService bandejaService = new BandejaService();
                String[] rpta = bandejaService.registraAsignacionService(sipDetSolicitud);
                return RedirectToAction("DerivaRpta", new { nIdeSol = 1, rpta = 1 });
            }
            ViewBag.optionBandejaUsuario = formaSelectBandejaUser(Session[Constante.N_IDE_USUARIO].ToString(), Session[Constante.N_IDE_DEPENDENCIA].ToString());
           
            return View("BandejaCab");
        }

        public ViewResult DerivaRpta(decimal nIdeSol, string rpta)
        {
           // if (nIdeSol > 0) ViewBag.rpta = 1;
            ViewBag.rpta = rpta;
            ViewBag.optionBandejaUsuario = formaSelectBandejaUser(Session[Constante.N_IDE_USUARIO].ToString(), Session[Constante.N_IDE_DEPENDENCIA].ToString());
            ViewBag.ClaseTramite = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_CLASE_TRAMITE);
            return View("BandejaCab");
        }

        public void insertaArchivos(int n_IdeSol, int nextPaso) {            
            HttpFileCollectionBase uploads = Request.Files;
            List<HttpPostedFileBase> files = new List<HttpPostedFileBase>();
            int sizeFile            =   uploads.Count;
            String idCampoFile      =   "idAdjunto";
            String nameFile         =   "";
            long pLength            =   0;
            
            if (sizeFile >0)
            {
                HttpPostedFileBase file = Request.Files[idCampoFile];
                pLength = file.InputStream.Length;

                if (pLength > 0)
                {
                    nameFile            =   file.FileName;                 

                    int ind1            =   0;
                    int longitud        =   0;
                    int tamanioCad      =   nameFile.Length;
                    Boolean corchete    =   nameFile.Contains("\\");
                    if (corchete)
                    {
                        ind1        =   nameFile.LastIndexOf("\\");
                        longitud    =   tamanioCad - ind1 - 1;
                        nameFile    =   nameFile.Substring(ind1 + 1, longitud);
                    }
                   // byte[] getBytes =   GetBytes(file);
                    BandejaService bandejaService = new BandejaService();
                    bandejaService.insertaArchivosService(GetBytes(file), n_IdeSol, nextPaso, nameFile);
                }
            }
        }

        public static byte[] GetBytes(HttpPostedFileBase file)
        {
            BinaryReader b = new BinaryReader(file.InputStream);
            return b.ReadBytes(file.ContentLength); 
        }

        public ViewResult UpLoadFileBandeja(int nIdeSol, string nSeqPaso, string nSeqActor, string solicitud)
        {
            ViewBag.nIdeSol = nIdeSol;
            ViewBag.nSeqPaso = nSeqPaso;
            ViewBag.solicitud = solicitud;
            BandejaService bandejaService = new BandejaService();
            return View(bandejaService.listaArchivosAdjuntosService(nIdeSol));
        }

        public ViewResult AddFileBandejaInp(int nIdeSol, string nSeqPaso)
        {
            ViewBag.nIdeSol = nIdeSol;
            ViewBag.nSeqPaso = nSeqPaso;
            return View();
        }

        public ViewResult VerBandejaFavorita(string sw)
        {
            string vista            = "";
            string tipoBandeja      = "";
            string idTipoBandeja    = "";
            string dFecInicio       = UtilitariosUtil.FechaHoy().ToString();
            string nIdeDepUser      = Session[Constante.N_IDE_DEPENDENCIA].ToString();
            string perfilUsuario    = Session[Constante.N_IDE_PERFIL].ToString();
            string idUsuario        = Session[Constante.N_IDE_USUARIO].ToString();
            
            ViewBag.ClaseTramite = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_CLASE_TRAMITE);
            ViewBag.optionBandejaUsuario = formaSelectBandejaUser(idUsuario, nIdeDepUser);
            ViewBag.rpta = "0";   
            if(sw.Equals("1")){
                vista = "bandejaEntradaCab";
                tipoBandeja = "Bandeja de Entrada";
            }
            else if (sw.Equals("3"))
            {
                vista = "bandejaSalidaCab";
                tipoBandeja = "Bandeja de Salida";
            }
            else if (sw.Equals("2"))
            {
                vista = "bandejaAsignadosCab";
                tipoBandeja = "Bandeja de Asignados";
                //idTipoBandeja = Constante.TIPO_BANDEJA.BANDEJA_ASIGNADOS;
            }
            ViewBag.tipoBandeja = tipoBandeja;

          //  BandejaService bandejaService = new BandejaService();


            //public IList<dynamic> filtraPorFechaService(string dFecInicio, string dFecFin, string tipoBandeja, string nIdeDepUser, string perfilUsuario, string idUsuario)
          //  IList<dynamic> lista = bandejaService.filtraPorFechaService(dFecInicio, dFecInicio, idTipoBandeja, nIdeDepUser, perfilUsuario, idUsuario);
            //int cant = lista.Count();
           // if (lista.Count > 0) vista=_pagina;
            
            // ViewBag.nIdeSol = nIdeSol;
           // ViewBag.nSeqPaso = nSeqPaso;
            return View(vista);
        }

        
        

               


    }
}
